package com.fourforfo.fourmall.product.controller;

import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;

//import org.apache.shiro.authz.annotation.RequiresPermissions;
import com.fourforfo.common.to.ProductSkuInfoTO;
import com.fourforfo.common.to.SkuInfoAndAttrsTO;
import com.fourforfo.fourmall.product.service.SkuSaleAttrValueService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import com.fourforfo.fourmall.product.entity.SkuInfoEntity;
import com.fourforfo.fourmall.product.service.SkuInfoService;
import com.fourforfo.common.utils.PageUtils;
import com.fourforfo.common.utils.R;



/**
 * sku信息
 *
 * @author fourforfo
 * @email fourforfo@gmail.com
 * @date 2022-06-16 12:30:14
 */
@RestController
@RequestMapping("product/skuinfo")
public class SkuInfoController {
    @Autowired
    private SkuInfoService skuInfoService;

    @Autowired
    private SkuSaleAttrValueService skuSaleAttrValueService;

    /**
     * 秒杀服务根据具体活动下的skuIds获取对应商品详情信息
     *  根据value中的skuIds查询相应sku信息，并根据key上的sessionId进行分组
     * @param idMaps
     * @Result 外层key是sessionId，里层是skuId:skuInfoEntity样式的map
     */
    @PostMapping("/listSkuInfoBySkuIdGroupBySessionId")
    public R listSkuInfoBySkuIdGroupBySessionId(@RequestBody Map<Long, List<Long>> idMaps){
        Map<Long,Map<Long,SkuInfoEntity>> result = skuInfoService.listSkuInfoBySkuIdGroupBySessionId(idMaps);
        return R.ok().setData(result);
    }

    /**
     * 根据ids获取价格信息
     */
    @PostMapping("/listPrices")
    public Map<Long, BigDecimal> listPriceByIds(@RequestBody List<Long> skuIds){
        List<SkuInfoEntity> skuInfoEntities = skuInfoService.listByIds(skuIds);
        if(skuInfoEntities!=null&&skuInfoEntities.size()>0){
            Map<Long, BigDecimal> result = skuInfoEntities.stream().collect(Collectors.toMap(SkuInfoEntity::getSkuId, SkuInfoEntity::getPrice));
            return result;
        }
        return null;
    }


    /**
     * 列表 关键字：key ，catelogId， brandId， min和max（价格区间）；
     */
    @RequestMapping("/list")
//    @RequiresPermissions("product:skuinfo:list")
    public R list(@RequestParam Map<String, Object> params){
        PageUtils page = skuInfoService.queryPage(params);
        return R.ok().put("page", page);
    }

    /**
     * 通过sku_ids获取所有的sku_name信息
     * @param skuIds
     * @return
     */
    @PostMapping("list/batch/sku_name")
    public List<ProductSkuInfoTO> listNameByIds(@RequestBody List<Long> skuIds){
        List<ProductSkuInfoTO> productSkuInfoTOS = new ArrayList<>();
        List<SkuInfoEntity> skuInfos = skuInfoService.listByIds(skuIds);
        if(skuInfos!=null&&skuInfos.size()>0){
            for(SkuInfoEntity skuInfoEntity : skuInfos){
                ProductSkuInfoTO productSkuInfoTO = new ProductSkuInfoTO();
                productSkuInfoTO.setSku_id(skuInfoEntity.getSkuId());
                productSkuInfoTO.setSku_name(skuInfoEntity.getSkuName());
                productSkuInfoTOS.add(productSkuInfoTO);
            }
        }
        return productSkuInfoTOS;
    }

    /**product/skuinfo
     * 供product-cart服务远程获取skuInfo和saleAttrs
     */
    @GetMapping("/infoAndAttr/{skuId}")
    public R infoAndAttr(@PathVariable("skuId") Long skuId){

        SkuInfoEntity skuInfo = skuInfoService.getById(skuId);

        List<String> saleAttrNameValues= skuSaleAttrValueService.listSaleAttrNameValue(skuId);
        if(skuInfo!=null){
            SkuInfoAndAttrsTO skuInfoAndAttrsTO = new SkuInfoAndAttrsTO();
            BeanUtils.copyProperties(skuInfo,skuInfoAndAttrsTO);
            skuInfoAndAttrsTO.setSaleAttrNameValues(saleAttrNameValues);
            return R.ok().put("skuInfo",skuInfoAndAttrsTO);
        }
        return R.error();
    }


    /**product/skuinfo
     * 信息
     */
    @RequestMapping("/info/{skuId}")
//    @RequiresPermissions("product:skuinfo:info")
    public R info(@PathVariable("skuId") Long skuId){
		SkuInfoEntity skuInfo = skuInfoService.getById(skuId);

        return R.ok().put("skuInfo", skuInfo);
    }

    /**
     * 保存
     */
    @RequestMapping("/save")
//    @RequiresPermissions("product:skuinfo:save")
    public R save(@RequestBody SkuInfoEntity skuInfo){
		skuInfoService.save(skuInfo);

        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
//    @RequiresPermissions("product:skuinfo:update")
    public R update(@RequestBody SkuInfoEntity skuInfo){
		skuInfoService.updateById(skuInfo);

        return R.ok();
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
//    @RequiresPermissions("product:skuinfo:delete")
    public R delete(@RequestBody Long[] skuIds){
		skuInfoService.removeByIds(Arrays.asList(skuIds));

        return R.ok();
    }

}
